/**
 * @file makeStrins.js
 * @author zhangLuping <zhuangluping@Antiy.cn>
 * @createTime 2018-01-23 13:46:07
 * @description summary用于详情页描述 & oneString用于日志主table
 */

import { translateVar } from './maps/varAbbMap'

/**
 * @description 判断属性是否存在
 * @param {any} ele
 * @returns {Boolean}
 */
const isNone = ele => {
  // var a = {c:''};  String
  // var b = {c:null};  Null
  // var d = {}; Undefined
  // var f = {c: {}} Object
  let _type = Object.prototype.toString.call(ele).slice(8, -1)
  return _type === 'Undefined' || _type === 'Null'
}

function transformNone (data) {
  return isNone(data) ? '' : data
}
function hasValue (data) {
  if (!isNone(data) && data !== '') {
    return true
  } else {
    return false
  }
}
// // data 结构 = [{}] data[0] 字段不一定存在，防止报错
// function deal (data, key) {
//   data = data === undefined ? [] : data
//   return isNone(data[0]) ? '' : data[key]
// }
// 告警级别大于0采用oneString 黑日志, 否则采用summary白日志
const desConfig = [
  // 攻击类别
  {
    pid: 'antiy_scan',
    useKey: 'stype',
    useValue: 'visible_dns',
    // 白日志
    summary: function (data) {
      let visible = '可用'
      visible = data.final_result === true ? '不可用' : visible
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> ${visible}，${translateVar(this.useKey, this.useValue)}的响应时长为 ${data.visible_time}ms，最后一次响应时间为 ${data.ts}`
    },
    // 黑日志
    oneString: function (data) {
      let visible = '可用'
      visible = data.final_result === true ? '不可用' : visible
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> ${visible}，${translateVar(this.useKey, this.useValue)}的响应时长为 ${data.visible_time}ms，最后一次响应时间为 ${data.ts}`
    },
    detail: function (data) {
      let visible = '可用'
      visible = data.final_result === true ? '不可用' : visible
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> ${visible}，${translateVar(this.useKey, this.useValue)}的响应时长为 ${data.visible_time}ms，最后一次响应时间为 ${data.ts}`
    }
  },
  {
    pid: 'antiy_scan',
    useKey: 'stype',
    useValue: 'visible_http',
    summary: function (data) {
      let visible = '可用'
      visible = data.final_result === true ? '不可用' : visible
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> ${visible}，${translateVar(this.useKey, this.useValue)}的响应时长为 ${data.visible_time}ms，最后一次响应时间为 ${data.ts}`
    },
    oneString: function (data) {
      let visible = '可用'
      visible = data.final_result === true ? '不可用' : visible
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> ${visible}，${translateVar(this.useKey, this.useValue)}的响应时长为 ${data.visible_time}ms，最后一次响应时间为 ${data.ts}`
    },
    detail: function (data) {
      let visible = '可用'
      visible = data.final_result === true ? '不可用' : visible
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> ${visible}，${translateVar(this.useKey, this.useValue)}的响应时长为 ${data.visible_time}ms，最后一次响应时间为 ${data.ts}`
    }
  },
  {
    pid: 'antiy_scan',
    useKey: 'stype',
    useValue: 'visible_ping',
    summary: function (data) {
      let visible = '可用'
      visible = data.final_result === true ? '不可用' : visible
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> ${visible}，${translateVar(this.useKey, this.useValue)}的响应时长为 ${data.visible_time}ms，最后一次响应时间为 ${data.ts}`
    },
    oneString: function (data) {
      let visible = '可用'
      visible = data.final_result === true ? '不可用' : visible
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> ${visible}，${translateVar(this.useKey, this.useValue)}的响应时长为 ${data.visible_time}ms，最后一次响应时间为 ${data.ts}`
    },
    detail: function (data) {
      let visible = '可用'
      visible = data.final_result === true ? '不可用' : visible
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> ${visible}，${translateVar(this.useKey, this.useValue)}的响应时长为 ${data.visible_time}ms，最后一次响应时间为 ${data.ts}`
    }
  },
  {
    pid: 'antiy_scan',
    useKey: 'stype',
    useValue: 'threat_trojan',
    summary: function (data) {
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span>经过扫描暂未发现任何攻击类风险`
    },
    oneString: function (data) {
      if (hasValue(data.g_url)) {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span>遭受挂马攻击，遭受挂马的网页为 <span >${transformNone(data.g_url)}</span>`
      } else {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> 遭受挂马攻击`
      }
    },
    detail: function (data) {
      if (data.level === 0) {
        return this.summary(data)
      } else {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span>遭受挂马攻击`
      }
    }
  },
  {
    pid: 'antiy_scan',
    useKey: 'stype',
    useValue: 'threat_phish',
    summary: function (data) {
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span>经过扫描暂未发现任何攻击类风险`
    },
    oneString: function (data) {
      if (hasValue(data.link)) {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span>疑似遭受钓鱼攻击，钓鱼链接为 <span >${data.link}</span>`
      } else {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span>疑似遭受钓鱼攻击`
      }
    },
    detail: function (data) {
      if (data.level === 0) {
        return this.summary(data)
      } else {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span>疑似遭受钓鱼攻击`
      }
    }
  },
  {
    pid: 'antiy_scan',
    useKey: 'stype',
    useValue: 'darklink',
    summary: function (data) {
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span>经过扫描暂未发现任何攻击类风险`
    },
    oneString: function (data) {
      if (hasValue(data.link)) {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> 发现暗链，暗链链接为 <span >${data.link}</span>`
      } else {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> 发现暗链`
      }
    },
    detail: function (data) {
      if (data.level === 0) {
        return this.summary(data)
      } else {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> 发现暗链`
      }
    }
  },
  {
    pid: 'antiy_scan',
    useKey: 'stype',
    useValue: 'mis',
    summary: function (data) {
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span>经过扫描暂未发现任何攻击类风险`
    },
    oneString: function (data) {
      if (hasValue(data.g_url)) {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> 的内容疑似发生篡改，遭受篡改的网页为 <span >${transformNone(data.g_url)}</span>`
      } else {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> 的内容疑似发生篡改`
      }
    },
    detail: function (data) {
      if (data.level === 0) {
        return this.summary(data)
      } else {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> 的内容疑似发生篡改`
      }
    }
  },
  {
    pid: 'antiy_scan',
    useKey: 'stype',
    useValue: 'web_vul',
    summary: function (data) {
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span>经过扫描暂未发现任何脆弱性风险`
    },
    oneString: function (data) {
      if (!isNone(data.vulns) && transformNone(data.vulns.name) !== '') {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> 存在 web漏洞，漏洞名称为 <span >${transformNone(data.vulns.name)}</span>`
      } else {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} 存在 web漏洞`
      }
    },
    detail: function (data) {
      if (data.level === 0) {
        return this.summary(data)
      } else {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} 存在 web漏洞`
      }
    }
  },
  {
    pid: 'antiy_scan',
    useKey: 'stype',
    useValue: 'os_vul',
    summary: function (data) {
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span>经过扫描暂未发现任何脆弱性风险`
    },
    oneString: function (data) {
      if (!isNone(data.vulns) && transformNone(data.vulns.name) !== '') {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> 存在 系统漏洞，漏洞名称为 <span >${transformNone(data.vulns.name)}</span>`
      } else {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> 存在 系统漏洞`
      }
    },
    detail: function (data) {
      if (data.level === 0) {
        return this.summary(data)
      } else {
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> 存在 系统漏洞`
      }
    }
  },
  {
    pid: 'antiy_scan',
    useKey: 'stype',
    useValue: 'weak_pwd',
    summary: function (data) {
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span>经过扫描暂未发现任何脆弱性风险`
    },
    oneString: function (data) {
      if (!isNone(data.crack)) {
        return `发现主机<span> ${transformNone(data.crack.host)}</span> 存在弱口令，账户为 ${data.crack.user}，口令为 ${data.crack.password}，扫描端口为 ${data.crack.port}，服务为 ${data.crack.service}`
      }
    },
    detail: function (data) {
      if (data.level === 0) {
        return this.summary(data)
      } else {
        return `发现主机<span> ${transformNone(data.crack.host)}</span> 存在弱口令，账户为 ${data.crack.user}，口令为 ${data.crack.password}，扫描端口为 ${data.crack.port}，服务为 ${data.crack.service}`
      }
    }
  },
  {
    pid: 'antiy_scan',
    useKey: 'stype',
    useValue: 'sensitive',
    summary: function (data) {
      return `网站<span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> 经过扫描暂未发现任何敏感词`
    },
    oneString: function (data) {
      if (!isNone(data.keyword)) {
        var len = data.keyword.split(',').length
      } else {
        len = 0
      }
      return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> 存在 <span >${transformNone(data.keyword)}</span> ${len}个敏感词`
    },
    detail: function (data) {
      if (data.level === 0) {
        return this.summary(data)
      } else {
        if (!isNone(data.keyword)) {
          var len = data.keyword.split(',').length
        } else {
          len = 0
        }
        return `网站 <span>${transformNone(data.site_info.name)} ${data.site_info.institution} </span> 存在 <span >${transformNone(data.keyword)}</span> ${len}个敏感词`
      }
    }
  }
]
/**
 * 获取对应类型的描述
 *
 * @param {Object} rawData  原始数据
 * @param {String} type  期望获得的描述的类型['des', 'summary']; 默认'des' 返回描述
 */
export const getOneStringDes = (rawData, type = 'des') => {
  let data = JSON.parse(JSON.stringify(rawData))
  for (let idx = 0, len = desConfig.length; idx < len; idx++) {
    // desConfig[idx].useKey 有 etype , pid, type
    // let _type = Object.prototype.toString.call(data[desConfig[idx].useKey])
    // data[desConfig[idx].useKey] = _type === '[object Array]' ? data[desConfig[idx].useKey].toString() : data[desConfig[idx].useKey]
    // if (desConfig[idx].pid === data.pid && desConfig[idx].useValue === data[desConfig[idx].useKey]) {
    //   if (type === 'des') {
    //     return desConfig[idx].oneString(data)
    //   } else if (type === 'summary') {
    //     return desConfig[idx].summary(data)
    //   }
    // }
    if (desConfig[idx].useValue === data['stype']) {
      data.site_info.institution = (isNone(data.site_info.institution) || data.site_info.institution === '' ? '' : `(${data.site_info.institution})`)
      if (type === 'des') {
        return desConfig[idx].oneString(data)
      } else if (type === 'summary') {
        return desConfig[idx].summary(data)
      } else if (type === 'detail') {
        return desConfig[idx].detail(data)
      }
    }
  }
}
